// 命名空间 三斜线 declare .d.ts这个怎么使用 如果我声明一个接口student包括name age 在vite使用vue3


// 步骤一：创建全局声明文件
// 在你的项目 src 或 types 目录下（推荐新建一个 types 文件夹）创建一个 .d.ts 文件，例如：
// types/global.d.ts


// 这是个很关键的问题，我们来详细讲清楚：在 Vite 项目中使用 .d.ts 文件时，是否需要 declare 或 declare global，取决于文件内容和作用域。
//
// ✅ TL;DR：你的问题总结
// 问： 如果是 Vite 项目，在 tsconfig.json 的 include 中引入 .d.ts 文件，不加 declare 可以吗？
//
// 🔹 回答：
// ✅ 可以不加 declare —— 如果你是直接在 .d.ts 文件中写 interface、type（全局声明），且文件不是模块（即不包含 import 或 export），那不需要加 declare。
//
// ❌ 必须加 declare global —— 如果这个 .d.ts 文件是模块（比如你用了 export 或 import），并且你想扩展全局类型（比如扩展 Window），那就必须用 declare global，并加上 export {} 让它成为模块。
//
// ✅ 示例 1：非模块文件（推荐用于全局声明）
//
// // src/types/global.d.ts —— 非模块文件（没有 import/export）
// interface Ip {
//     uname: string;
//     age: number;
// }
//
// interface Window {
//     myAppVersion: string;
// }
// 这个文件可以直接被 tsconfig.json 的 include 匹配生效，因为它是全局声明文件。
//
// 📌 注意：
// 不能有 import 或 export，否则就变成模块了。
//
// 推荐用于全局变量、全局 interface 等。
//
// ✅ 示例 2：模块文件（需要 declare global + export {}）
//
// // src/types/global.d.ts —— 模块文件（含 export）
// export interface Ip {
//     uname: string;
//     age: number;
// }
//
// declare global {
//     interface Window {
//         myAppVersion: string;
//     }
// }
//
// export {}; // ❗必须有，确保文件是模块
// 如果你用了 export interface Ip，这个文件就成了模块，你要扩展全局作用域，必须用 declare global {}。
//


// 🌟 方式 1：使用命名空间（推荐加上前缀，防止污染）
// types/global.d.ts
// export {}; // 避免这个文件变成模块
//
// declare namespace MyTypes {
//     interface Student {
//         name: string;
//         age: number;
//     }
// }

// 🌟 方式 2：全局声明类型（直接用 Student）
// // types/global.d.ts
// export {};

// declare interface Student {
//     name: string;
//     age: number;
// }

// ✅ 步骤二：让 Vite 项目识别类型声明
// 方式一：Vite 会自动加载 .d.ts（放在 tsconfig 范围内即可）
// 默认只要 tsconfig.json 的 include 包含了声明文件目录，类型就会自动生效：
// // tsconfig.json
// {
//     "compilerOptions": {
//     "types": []
// },
//     "include": ["src", "types"]  // 👈 确保包含了你放 .d.ts 的目录
// }

//
// ✅ 推荐顺序（现代 Vue + TS 项目）


// ✅ 第一推荐：declare interface + .d.ts + tsconfig 配置（方式 3）
// 类型是全局可见的，使用最自然。
// 不需要额外引入，IDE 支持好。
// 易于维护（推荐放在 types/ 目录下）。


// ⚠️ 第二推荐：命名空间（方式 1）
// 如果你有很多相关类型，想逻辑归组，可以使用 namespace。
// 比如：MyTypes.Student、MyTypes.Teacher。
// 缺点是：书写时多一级命名、使用稍繁琐。

// 🚫 不推荐：三斜线引用（方式 2）
// 三斜线引用是 老式的方式，现在基本淘汰。
// 容易遗漏、不清晰、不适合模块化项目。
// 在 Vue + Vite 项目中几乎不需要用它。